package pres.lnk.learn.designpattern.e_prototype;

import pres.lnk.learn.designpattern.e_prototype.cache.ShapeCache;
import pres.lnk.learn.designpattern.e_prototype.shape.Shape;

/**
 * <p>原型模式</p>
 * <pre>
 * 当需要频繁创建一个差异不大的对象时，该对象创建时间又比较耗时（如：从数据库加载很耗时），
 * 就可以使用原型模式，将对象放到缓存中，需要用的时间就clone一个来用（注意深克隆和浅克隆问题）。
 * 个人理解，原型就是一个模板，用的时候就复制一个模板出来改一下就可以用了。
 * </pre>
 * @Author lnk
 * @Date 2018/2/6
 */
public class Main {
    public static void main(String[] args) {
        /**
         * 每次在创建原型之前都要先加载原型
         */
        ShapeCache.loadCache();

        Shape clonedShape = ShapeCache.getShape("1");
        System.out.println("形状 : " + clonedShape.getType());

        Shape clonedShape2 = ShapeCache.getShape("2");
        System.out.println("形状 : " + clonedShape2.getType());

        Shape clonedShape3 = ShapeCache.getShape("3");
        System.out.println("形状 : " + clonedShape3.getType());
    }
}
